package de.dis2011;

import java.sql.Date;

import de.dis2011.data.*;

/**
 * Hauptklasse
 */
public class Main
{
    
    final static String USRLOGIN = "Makler";
    final static String USRPWD = "1234";
    
    /**
     * Startet die Anwendung
     */
    public static void main(String[] args)
    {
        showMainMenu();
    }

    /**
     * Zeigt das Hauptmenü
     */
    public static void showMainMenu()
    {
        // Menüoptionen
        final int MENU_MAKLER = 0;
        final int MENU_IMMOBILIEN = 1;
        final int MENU_VERTAG = 2;
        final int QUIT = 3;

        // Erzeuge Menü
        Menu mainMenu = new Menu("Hauptmenü");
        mainMenu.addEntry("Makler-Verwaltung", MENU_MAKLER);
        mainMenu.addEntry("Immobilien-Verwaltung", MENU_IMMOBILIEN);
        mainMenu.addEntry("Vertrag-Verwaltung", MENU_VERTAG);
        mainMenu.addEntry("Beenden", QUIT);

        // Verarbeite Eingabe
        while (true)
        {
            int response = mainMenu.show();

            switch (response)
            {
            case MENU_MAKLER:
                logIn();
                // showMaklerMenu();
                break;
            case MENU_IMMOBILIEN:
                showImmobilienMenu();
                break;
            case MENU_VERTAG:
                showVertragMenu();
                break;
            case QUIT:
                return;
            }
        }
    }

    /**
     * Zeigt die Maklerverwaltung
     */
    public static void showMaklerMenu()
    {
        // Menüoptionen
        final int NEW_MAKLER = 0;
        final int DELETE_MAKLER = 1;
        final int EDIT_MAKLER = 2;
        final int BACK = 3;

        // Maklerverwaltungsmenü
        Menu maklerMenu = new Menu("Makler-Verwaltung");
        maklerMenu.addEntry("Neuer Makler", NEW_MAKLER);
        maklerMenu.addEntry("Lösche Makler", DELETE_MAKLER);
        maklerMenu.addEntry("Ändere Makler", EDIT_MAKLER);
        maklerMenu.addEntry("Zurück zum Hauptmenü", BACK);

        // Verarbeite Eingabe
        while (true)
        {
            int response = maklerMenu.show();

            switch (response)
            {
            case NEW_MAKLER:
                newMakler();
                break;
            case DELETE_MAKLER:
                deleteMakler();
                break;
            case EDIT_MAKLER:
                editMakler();
                break;
            case BACK:
                return;
            }
        }
    }

    /**
     * Zeigt die Immobilienverwaltung
     */
    public static void showImmobilienMenu()
    {
        // Menüoptionen
        final int NEW_WOHNUNG = 0;
        final int DELETE_WOHNUNG = 1;
        final int EDIT_WOHNUNG = 2;
        final int NEW_HAUS = 3;
        final int DELETE_HAUS = 4;
        final int EDIT_HAUS = 5;
        final int BACK = 6;
        
        String login;
        String pwd;
        
        login = FormUtil.readString("Login eingeben: ");
        pwd = FormUtil.readString("Passwort: ");
        
        if (login.equals(USRLOGIN) && pwd.equals(USRPWD)){
            System.out.println("Login erfolgreich");
        } else {
            System.out.println("Login fehlgeschlagen");
            showMainMenu();
        }

        // Maklerverwaltungsmenü
        Menu immoMenu = new Menu("Immobilie-Verwaltung");
        immoMenu.addEntry("Neue Wohnung", NEW_WOHNUNG);
        immoMenu.addEntry("Lösche Wohnung", DELETE_WOHNUNG);
        immoMenu.addEntry("Ändere Wohnung", EDIT_WOHNUNG);
        immoMenu.addEntry("Neues Haus", NEW_HAUS);
        immoMenu.addEntry("Lösche Haus", DELETE_HAUS);
        immoMenu.addEntry("Ändere Haus", EDIT_HAUS);
        immoMenu.addEntry("Zurück zum Hauptmenü", BACK);

        // Verarbeite Eingabe
        while (true)
        {
            int response = immoMenu.show();

            switch (response)
            {
            case NEW_WOHNUNG:
                newWohnung();
                break;
            case DELETE_WOHNUNG:
                deleteWohnung();
                break;
            case EDIT_WOHNUNG:
                editWohnung();
                break;
            case NEW_HAUS:
                newHaus();
                break;
            case DELETE_HAUS:
                deleteHaus();
                break;
            case EDIT_HAUS:
                editHaus();
                break;
            case BACK:
                return;
            }
        }
    }

    /**
     * Zeigt die Vertragverwaltung
     */
    public static void showVertragMenu()
    {
        // Menüoptionen
        final int NEW_PERSON = 0;
        final int NEW_MIETVERTRAG = 1;
        final int NEW_KAUFVERTRAG = 2;
        final int ZEIGE_VERTRAEGE = 3;
        final int BACK = 4;

        // Maklerverwaltungsmenü
        Menu verMenu = new Menu("Vertrag-Verwaltung");
        verMenu.addEntry("Neue Person", NEW_PERSON);
        verMenu.addEntry("Neuer Mietvertrag", NEW_MIETVERTRAG);
        verMenu.addEntry("Neuer Kaufvertrag", NEW_KAUFVERTRAG);
        verMenu.addEntry("Zeige Verträge", ZEIGE_VERTRAEGE);
        verMenu.addEntry("Zurück zum Hauptmenü", BACK);

        // Verarbeite Eingabe
        while (true)
        {
            int response = verMenu.show();

            switch (response)
            {
            case NEW_PERSON:
                newPerson();
                break;
            case NEW_MIETVERTRAG:
                newMietvertrag();
                break;
            case NEW_KAUFVERTRAG:
                newKaufvertrag();
                break;
            case ZEIGE_VERTRAEGE:
                showVertraege();
                break;
            case BACK:
                return;
            }
        }
    }

    /**
     * Log-In Funktion
     */
    public static void logIn()
    {

        String eingabe;

        eingabe = FormUtil.readString("Passwort");

        if (eingabe.equals("passwort"))
        {
            System.out.println("Passwort korrekt");
            showMaklerMenu();
        }
        else
        {
            System.out.println("Passwort inkorrekt: " + eingabe);

            showMainMenu();
        }
    }

    /**
     * Legt einen neuen Makler an, nachdem der Benutzer die entprechenden Daten
     * eingegeben hat.
     */
    public static void newMakler()
    {
        Makler m = new Makler();

        m.setName(FormUtil.readString("Name"));
        m.setAddresse(FormUtil.readString("Adresse"));
        m.setLogin(FormUtil.readString("Login"));
        m.setPassword(FormUtil.readString("Passwort"));
        m.save();

        System.out.println("Makler mit der ID " + m.getId() + " wurde erzeugt.");
    }

    public static void deleteMakler()
    {
        Makler m = new Makler();
        m.setId(FormUtil.readInt("Id"));
        m.delete();

        System.out.println("Makler mit der ID " + m.getId() + " wurde gelöscht.");
    }

    public static void editMakler()
    {
        Makler m = new Makler();
        m.setId(FormUtil.readInt("Id"));
        m.setName(FormUtil.readString("Name"));
        m.setAddresse(FormUtil.readString("Adresse"));
        m.setLogin(FormUtil.readString("Login"));
        m.setPassword(FormUtil.readString("Passwort"));
        m.edit();

        System.out.println("Makler mit der ID " + m.getId() + " wurde geändert.");
    }

    public static void newWohnung()
    {
        Wohnung i = new Wohnung();

        i.setOrt(FormUtil.readString("Ort"));
        i.setPlz(FormUtil.readString("Plz"));
        i.setStrasze(FormUtil.readString("Straße"));
        i.setHausnr(FormUtil.readInt("HausNr"));
        i.setFlaeche(FormUtil.readInt("Fläche"));
        i.setStockwerk(FormUtil.readInt("Stockwerk"));
        i.setMietpreis(FormUtil.readInt("Mietpreis"));
        i.setZimmer(FormUtil.readInt("Zimmer"));
        i.setBalkon(FormUtil.readInt("Balkon"));
        i.setEBK(FormUtil.readInt("EBK"));
        i.setVerwalter(FormUtil.readInt("Verwalter"));
        i.save();

        System.out.println("Wohnung mit der ID " + i.getId() + " wurde erzeugt.");
    }

    public static void deleteWohnung()
    {
        Wohnung i = new Wohnung();
        i.setId(FormUtil.readInt("Id"));
        i.delete();

        System.out.println("Wohnung mit der ID " + i.getId() + " wurde gelöscht.");
    }

    public static void editWohnung()
    {
        Wohnung i = new Wohnung();
        i.setId(FormUtil.readInt("Id"));
        i.setOrt(FormUtil.readString("Ort"));
        i.setPlz(FormUtil.readString("Plz"));
        i.setStrasze(FormUtil.readString("Straße"));
        i.setHausnr(FormUtil.readInt("HausNr"));
        i.setFlaeche(FormUtil.readInt("Fläche"));
        i.setStockwerk(FormUtil.readInt("Stockwerk"));
        i.setMietpreis(FormUtil.readInt("Mietpreis"));
        i.setZimmer(FormUtil.readInt("Zimmer"));
        i.setBalkon(FormUtil.readInt("Balkon"));
        i.setEBK(FormUtil.readInt("Balkon"));
        i.setVerwalter(FormUtil.readInt("Verwalter"));
        i.edit();

        System.out.println("Wohnung mit der ID " + i.getId() + " wurde geändert.");
    }

    public static void newHaus()
    {
        Haus i = new Haus();

        i.setOrt(FormUtil.readString("Ort"));
        i.setPlz(FormUtil.readString("Plz"));
        i.setStrasze(FormUtil.readString("Straße"));
        i.setHausnr(FormUtil.readInt("HausNr"));
        i.setFlaeche(FormUtil.readInt("Fläche"));
        i.setStockwerke(FormUtil.readInt("Stockwerke"));
        i.setKaufpreis(FormUtil.readInt("Kaufpreis"));
        i.setGarten(FormUtil.readInt("Garten"));
        i.setVerwalter(FormUtil.readInt("Verwalter"));
        i.save();

        System.out.println("Haus mit der ID " + i.getId() + " wurde erzeugt.");
    }

    public static void deleteHaus()
    {
        Haus i = new Haus();
        i.setId(FormUtil.readInt("Id"));
        i.delete();

        System.out.println("Haus mit der ID " + i.getId() + " wurde gelöscht.");
    }

    public static void editHaus()
    {
        Haus i = new Haus();
        i.setId(FormUtil.readInt("Id"));
        i.setOrt(FormUtil.readString("Ort"));
        i.setPlz(FormUtil.readString("Plz"));
        i.setStrasze(FormUtil.readString("Straße"));
        i.setHausnr(FormUtil.readInt("HausNr"));
        i.setFlaeche(FormUtil.readInt("Fläche"));
        i.setStockwerke(FormUtil.readInt("Stockwerke"));
        i.setKaufpreis(FormUtil.readInt("Kaufpreis"));
        i.setGarten(FormUtil.readInt("Garten"));
        i.setVerwalter(FormUtil.readInt("Verwalter"));
        i.edit();

        System.out.println("Haus mit der ID " + i.getId() + " wurde geändert.");
    }
    
    public static void newPerson() {
        Person p = new Person();

        p.setVorname(FormUtil.readString("Vorname"));
        p.setNachname(FormUtil.readString("Nachname"));
        p.setAddress(FormUtil.readString("Adresse"));
        p.save();

        System.out.println("Person mit der ID " + p.getId() + " wurde erzeugt.");
        
    }
    
    public static void newMietvertrag() {
        Mietvertrag m = new Mietvertrag();
        
        m.setVertragsnummer(FormUtil.readInt("Vertragsnummer"));
        m.setDatum(FormUtil.readDate("Datum"));
        m.setOrt(FormUtil.readString("Ort"));
        m.setMietbeginn((Date) FormUtil.readDate("Mietbeginn"));
        m.setDauer(FormUtil.readInt("Dauer"));        
        m.setNebenkosten(FormUtil.readInt("Nebenkosten"));
        m.setVermieter(FormUtil.readInt("vermieter"));
        m.setObjekt(FormUtil.readInt("Objekt")); 
        m.save();
        System.out.println("Mietvertrag mit der ID " + m.getId() + " wurde erzeugt.");
        
    }
    
    public static void newKaufvertrag() {
        Kaufvertrag k = new Kaufvertrag();
        
        k.setVertragsnummer(FormUtil.readInt("Vertragsnummer"));
        k.setDatum(FormUtil.readDate("Datum"));
        k.setOrt(FormUtil.readString("Ort"));
        k.setAnzahlraten(FormUtil.readInt("Anzahlraten"));        
        k.setRatenzins(FormUtil.readInt("Ratenzins"));
        k.setVerkaeufer(FormUtil.readInt("Verkaeufer"));
        k.setObjekt(FormUtil.readInt("Objekt")); 
        k.save();
        System.out.println("Kaufvertrag mit der ID " + k.getId() + " wurde erzeugt.");
        
    }
    
    public static void showVertraege() {
        Vertrag v = new Vertrag();
        
        v = v.loadAll();
        
        System.out.println(v.getId()+ " " + v.getVertragsnummer()+ " " +v.getOrt()+ " " +v.getDatum());
        
        
    }
}
